import { IN_ELECTRON } from "@follow/shared/constants"
import { wrapCreateBrowserRouterV7 } from "@sentry/react"
import { createBrowserRouter, createHashRouter } from "react-router"

import { Component as App } from "./App"
import { ErrorElement } from "./components/common/ErrorElement"
import { NotFound } from "./components/common/NotFound"
// @ts-ignore - 忽略类型检查，因为这是自动生成的文件
import { routes as tree } from "./generated-routes"

/**
 * 根据运行环境选择合适的路由器创建函数
 * - 在Electron环境或调试代理模式下使用createHashRouter（使用hash路由）
 * - 在浏览器环境下使用createBrowserRouter（使用history路由）
 */
let routerCreator =
  IN_ELECTRON || globalThis["__DEBUG_PROXY__"] ? createHashRouter : createBrowserRouter

// 如果启用了Sentry，则使用Sentry包装路由器创建器以捕获路由错误
if (window.SENTRY_RELEASE) {
  // 由于变量未使用且不符合命名规则，移除未使用的变量声明
  routerCreator = wrapCreateBrowserRouterV7(routerCreator)
}

/**
 * 创建并导出路由器实例
 * 定义应用的路由结构和配置
 */
export const router = routerCreator([
  {
    // 根路由，匹配所有路径的起始点
    path: "/",
    // 根组件，包含整个应用的基本布局
    Component: App,
    // 子路由树，从自动生成的路由配置导入
    // 这里包含了所有页面路由，包括重定向的index.sync.tsx
    children: tree,
    // 错误处理组件，当路由加载出错时显示
    errorElement: <ErrorElement />,
  },
  {
    // 通配符路由，匹配所有未明确定义的路径
    path: "*",
    // 404页面组件
    element: <NotFound />,
  },
])
